<?php

declare(strict_types=1);

namespace app\admin\middleware;

use app\admin\model\Admin;
use app\common\jwt\Auth;
use think\facade\Session;
use app\common\lib\OperationLog;
/***
 * 登录校验
 * 校验该请求是否需要登录
*/
class JwtAuth
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     * 返回 202
     */

    public function handle($request, \Closure $next)
    {

        $token = $request->header('Authorization');

        if(empty($token)){
            return suc('token无效','',202);
        }

          $user_id =  (new Auth())->checkToken($token);

        if(empty($user_id)){
            return suc('token无效','',202);
        }
        if(empty($user_id['data'])){
            return suc('token无效','',202);
        }

        $user = Admin::where(['id'=>$user_id['data']->uid,'state'=>1])->find();
        if(!$user){
            return  suc('没有该用户或者用户已被禁用','',202);
        }
        Session::set('AdminUser',$user);

        //组装得到要log的数据 管理员操作日志记录
        $content = [
            "userId"=>$user->id,//请求用户id
            "username"=>$user->username,//请求用户账号
            "ip"=>$request->ip(),//访问ip
            "time"=>date('Y-m-d H:i:s',time()),//请求时间
            "host"=>$request->domain(),//请求域名
            "uri"=>$request->url(),//请求的接口
            "ua"=>$request->header('user-agent'), //用户代理 浏览器
            "method"=>$request->method(),//请求方式
            "param"=>$request->param(),//请求参数
        ];
        $log = new OperationLog('admin'); //实例化 对象
        $log->log($content);//记录

        return $next($request);
    }
}
